package com.itheima.service.impl;

import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import com.itheima.service.OrderSettingService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Service(interfaceClass = OrderSettingService.class)
@Transactional
public class OrderSettingServiceImpl implements OrderSettingService {

    //自动注入
    @Autowired
    private OrderSettingDao orderSettingDao;

    //上传文件
    @Override
    public void add(List<OrderSetting> orderSettings) {
        //判断
        if (orderSettings != null && orderSettings.size() > 0){
            //循环遍历，添加到数据库
            for (OrderSetting orderSetting : orderSettings) {
                //有可能出现一个文件多次上传的原因，所以在这里先查询List集合中的日期在数据库里 有没有存在，存在就修改，不存在就添加
                //判断当前日期是否已经进行了预约设置，查找这个日期出现的次数，如果大于1，就证明存在
                Date orderDate = orderSetting.getOrderDate();//循环遍历的每一个日期
                long countByOrderDate = orderSettingDao.findCountByOrderDate(orderDate);
                if (countByOrderDate > 0){//说明存在，存在就修改
                    //已经进行了预约设置,执行更新操作
                    orderSettingDao.editNumberByOrderDate(orderSetting);;
                }else {
                    //没有进行预约设置，执行插入操作
                    orderSettingDao.add(orderSetting);
                }
            }
        }
    }

    @Override
    public List<Map> getOrderSettingByMonth(String date) {
        //查询的是每一个月，拼接字符串，从1号开始，最多31号结束
        String begin = date + "-01";
        String end = date + "-31";
        //Dao层的查询参数，把开始日期和结束日期封装到Map集合中
        Map<String,String> map = new HashMap<>();
        map.put("begin",begin);
        map.put("end",end);
        //调用DAO，根据日期范围查询预约设置数据
        List<OrderSetting> orderSettings = orderSettingDao.getOrderSettingByMonth(map);

        //声名返回的结果
        List<Map> result = new ArrayList<>();
        //循环遍历orderSettings，得到每一天的数据
        if (orderSettings != null && orderSettings.size() > 0){
            for (OrderSetting orderSetting : orderSettings) {
                Map<String,Object> m = new HashMap<>();
                //获取当前日期的天（几号）
                m.put("date",orderSetting.getOrderDate().getDate());
                //获取可预约人数
                m.put("number",orderSetting.getNumber());
                //获得已预约的人数
                m.put("reservations",orderSetting.getReservations());
                //最后把这个集合添加到List<Map>中,每循环一组，就添加一组Map
                result.add(m);
            }

        }

        return result;

    }

    @Override
    public void edit(OrderSetting orderSetting) {
        //通过这个日期，来查询，是否已经存入
        Date orderDate = orderSetting.getOrderDate();
        long count = orderSettingDao.findCountByOrderDate(orderDate);
        if (count > 0){//证明存在，存在就修改
            orderSettingDao.editNumberByOrderDate(orderSetting);
        }else{//没查询到就证明没有。就添加
            orderSettingDao.add(orderSetting);
        }
    }

}
